package org.azmat.mybatis.SQL.Entity;

import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

// 使用@Data注解来自动生成getter和setter方法，以及equals、hashCode和toString方法
@Data
// 使用@AllArgsConstructor注解来自动生成包含所有属性的构造函数
@AllArgsConstructor
// 使用@NoArgsConstructor注解来自动生成无参构造函数
@NoArgsConstructor
// 定义一个名为"employee"的实体，对应数据库中的employee表
@Entity(name = "employee")
public class Employee {

    // 使用@Id注解标记id属性为主键
    // 使用@GeneratedValue(strategy = GenerationType.IDENTITY)注解指定主键生成策略为自增长
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    // 定义一个名为name的属性，类型为String，代表员工的名字
    private String name;

    // 定义一个名为job的属性，类型为String，代表员工的职位
    private String job;

    // 定义一个名为salary的属性，类型为int，代表员工的工资
    private int salary;

    // 定义一个名为 leader 的属性，类型为 Employee，表示员工的上级
    // 使用 @ManyToOne 注解标识多对一的关系，一个员工可以有一个上级
    // 使用 @JoinColumn 注解指定关联的数据库表字段
    @ManyToOne
    @JoinColumn(name = "leaderid")
    private Employee leader;

    // 定义一个名为 employees 的属性，类型为 List<Employee>，表示员工的下属
    @OneToMany(mappedBy = "leader")
    private List<Employee> employees;

}